package cc.rengu.igas.cops.common.util;

import cc.rengu.utility.log.RgLog;
import cc.rengu.utility.log.RgLogger;

import java.net.URLDecoder;

/**
 * C1二维码工具类
 *
 * @author panky
 * @version 1.0.0 创建时间：2020/08/13
 */
public class QrCodeUtil {

    protected RgLogger rglog = RgLog.getLogger(this.getClass().getName());

    /**
     * 过滤C1码原串中的tt和si信息
     *
     * @param qrUrl 二维码信息
     * @return 处理后的二维码
     */
    public static String filterTtAndSi(String qrUrl) throws Exception {
        if (qrUrl.indexOf("&si=") > 0) {
            StringBuilder sb = new StringBuilder();
            String paramterData;
            if (qrUrl.indexOf("?") > 0) {
                paramterData = qrUrl.substring(qrUrl.indexOf("?") + 1);
                sb.append(qrUrl, 0, qrUrl.indexOf("?") + 1);
            } else {
                paramterData = qrUrl.substring(qrUrl.lastIndexOf("/") + 1);
                sb.append(qrUrl, 0, qrUrl.lastIndexOf("/") + 1);
            }
            paramterData = URLDecoder.decode(paramterData, "UTF-8");
            //C1码
            String[] tempArray = paramterData.split("&");
            for (String item : tempArray) {
                if (!item.contains("tt=")
                        && !item.contains("si=")) {
                    sb.append(item);
                    sb.append("&");
                }
            }
            return sb.substring(0, sb.length() - 1);
        }
        return qrUrl;
    }

    /**
     * 获得url中的参数
     *
     * @param url       二维码
     * @param paramName 参数名
     * @return 参数值
     * @throws Exception 异常
     */
    public static String getParamValue(String url, String paramName) throws Exception {
        String paramterData;
        if (url.indexOf("?") > 0) {
            paramterData = url.substring(url.indexOf("?") + 1);
        } else {
            paramterData = url.substring(url.lastIndexOf("/") + 1);
        }
        paramterData = URLDecoder.decode(paramterData, "UTF-8");
        String[] tempArray = paramterData.split("&");
        for (String item : tempArray) {
            int index = item.indexOf("=");
            index = Math.max(index, 0);
            String key = item.substring(0, index).trim();
            if (key.equals(paramName)) {
                return item.substring(index + 1).trim();
            }
        }
        return "";
    }

    /**
     * 检查订单类型是否是银联二维码类型订单
     *
     * @param orderType 二维码类型
     * @return true-银联二维码,false-非银联二维码
     */
    public static boolean checkQrOrderType(String orderType) {
        if (null == orderType || "".equals(orderType.trim())) {
            return false;
        }
        /* 银联订单类型 */
        String userOrderTypes = "10,11,12,14,15,16,20,31,40";
        return !userOrderTypes.contains(orderType);
    }
}
